home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / vmed.arc / VMRIO.ASM < prev    next >
Encoding:
Assembly Source File  |  1985-12-03  |  1.9 KB  |  96 lines

  1. ;vmrio/asm - 2/27/84 - jwk
  2.     COM    '<Copyright 1983 by Jim Kyle>'
  3.     COM    '<All Rights Reserved>'
  4. ;sec_seek(fp,sec)    FILE *fp; int sec;
  5. SEC_SEEK
  6.     $GA    HL,BC        ;recover arg values (LC macro)
  7.     LD    E,(HL)
  8.     INC    HL
  9.     LD    D,(HL)
  10.     INC    DE        ;to FCB itself
  11.     IF    @_MODEL.EQ.4
  12.     LD    A,66        ;svc
  13.     RST    40
  14.     ELSE
  15.     CALL    4442H        ;DOS @POSN routine
  16.     ENDIF
  17.     LD    HL,0        ;return OK if no err
  18.     RET    Z
  19.     CP    28        ;end of file?
  20.     RET    Z
  21.     CP    29        ;past end of file?
  22.     RET    Z
  23.     CALL    @ERRET        ;else report error
  24.     LD    HL,-2         ;and return ERR
  25.     RET
  26. ;--end of module
  27. *M
  28. ;fread(fp,bfr,n)    FILE *fp; char *bfr; int n;
  29. FREAD
  30.     $GA    HL,DE,BC    ;get args (LC macro)
  31.     CALL    @GINT        ;get LC FCB adr into HL
  32.     INC    HL        ;to FCB
  33.     EX    DE,HL        ;HL=buf, DE=fcb, BC=n
  34.     INC    BC        ;because of decr in test
  35.     PUSH    BC        ;to stack
  36.     LD    BC,0        ;actual char count
  37.     JR    $?3
  38. $?1    EX    (SP),HL
  39.     IF    @_MODEL.EQ.4
  40.     LD    A,3        ;svc
  41.     RST    40
  42.     ELSE
  43.     CALL    0013H        ;DOS @GET routine
  44.     ENDIF
  45.     JR    Z,$?2
  46.     LD    BC,-1        ;error return value
  47.     JR    $?4
  48. $?2    LD    (HL),A
  49.     INC    HL
  50.     INC    BC        ;the count
  51. $?3    EX    (SP),HL        ;swap 'n' and 'buf'
  52.     DEC    HL
  53.     LD    A,H
  54.     OR    L
  55.     JR    NZ,$?1        ;not done yet
  56. $?4    POP    HL        ;clean up stack
  57.     LD    H,B
  58.     LD    L,C        ;count of actual transfer
  59.     RET
  60. ;--end of module--
  61. *M
  62. ;fwrite(fp,bfr,n)    FILE *fp; char *bfr; int n;
  63. FWRITE
  64.     $GA    HL,DE,BC
  65.     CALL    @GINT        ;get LC FCB adr into HL
  66.     INC    HL        ;to true FCB adr
  67.     EX    DE,HL        ;HL=buf, DE=fcb, BC=n
  68.     INC    BC        ;because of decr in test
  69.     PUSH    BC        ;to stack
  70.     LD    BC,0        ;actual char count
  71.     JR    $?2
  72. $?1    EX    (SP),HL        ;get buf adr back into HL
  73.     LD    A,(HL)
  74.     INC    HL
  75.     IF    @_MODEL.EQ.4
  76.     PUSH    BC
  77.     LD    C,A
  78.     LD    A,4        ;svc
  79.     RST    40
  80.     POP    BC
  81.     ELSE
  82.     CALL    001BH        ;DOS @PUT routine
  83.     ENDIF
  84.     JR    NZ,$?3        ;in case of any error
  85.     INC    BC        ;the count
  86. $?2    EX    (SP),HL        ;swap 'n' and 'buf'
  87.     DEC    HL
  88.     LD    A,H
  89.     OR    L
  90.     JR    NZ,$?1        ;not done yet
  91. $?3    POP    HL        ;clean up stack
  92.     LD    H,B
  93.     LD    L,C        ;count of actual transfer
  94.     RET
  95. ;--end of module--
  96.